Operating systems crash from time to time due to a bug or a kernel panic and shut down, i.e., they crash. During a crash some operating systems create a crash file which can include information that may allow a support person or an automated system to identify the problem and recommend a corrective measure.
A component that does not rely on the operating system can be registered to create a crash file if the operating system enters an unstable state. When the operating system reboots the file can be detected and presented to a user for diagnostic purposes. Most computer systems boot from a backplane bus device like an integrated drive electronics device (“IDE device”) or a peripheral component interconnect bus and operating system developers typically have written the operating system code to use these devices to store crash files. These operating systems are typically configured to load a copy driver, i.e., a shadow storage driver, for the boot device at boot time and pre-initialized it as a crash stack, i.e., configure it to execute a crash generating program specific to the operating system at crash. In the event that the operating system crashes, the shadow storage driver can execute the program; generate a crash file; and write the crash file to storage before the computer shuts down.
This technique works well in a physical environment, however in a virtualized environment the guest operating system, i.e., an operating system within a virtual machine, may not have a sufficient mechanism for generating a crash file in a virtualized environment. For example, the guest operating system may not have booted from an emulation of a well-know device such as a backplane bus based controller. Instead, the guest could have booted from a protocol bus based storage stack such as an internet small computer system interface (“iSCSI”) or the fibre channel protocol. For example, protocol bus based storage stacks typically have their crash dump driver provided by the hardware manufacturer, but in this situation, the hardware is virtual and therefore the guest operating system may not have a crash stack to load for the protocol bus. In another example situation, the boot device may not be an emulation of a well-known device for which there was an existing and mature device driver within the guest operating system. In these situations if the guest operating system crashed it would restart without creating a crash file. Since there is enormous value in obtaining a crash file, the situation where a guest operating system can not create one is unacceptable. However since it is costly and difficult to reengineer each guest operating system, and one of the important aspects of virtual machine technology is that it allows “old” operating systems to operate, a problem in the art exists.